/************************************************************************

								Heroes IV
					  Copyright 2000, The 3DO Company

	------------------------------------------------------------------
  						       platform.h

	$Header: /game/platform.h $

	$NoKeywords: $

 ************************************************************************/

#ifndef PLATFORM_H_INCLUDED
#define PLATFORM_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <vector>

class  t_adventure_frame;
class  t_window;
struct t_screen_point;
struct t_screen_rect;
struct t_window_rect;


// the following functions are defined in the platform-specific file (i.e. windows_game.cpp).

// true if we're in the middle of a resolution switch
bool           changing_resolutions();
// clear any pending mouse clicks, etc.
void		   clear_pending_messages();
// do whatever is required by the platform to close down the game.
void           close_game();
// exit with a message
void           fatal_error( std::string const& message );
// get current working directory as a string
std::string    get_current_folder();
// get size of desktop
t_screen_point get_desktop_size();
// get size / position of bounding window
t_screen_rect  get_main_window_rect();
// get visible rectangles in main window
void           get_main_window_visible_rects( std::vector<t_screen_rect>& rects );
// get mouse position, in absolute screen coordinates.
t_screen_point get_mouse_screen_position();
// get mouse position, in client coordinates
t_screen_point get_mouse_position( t_window const* window = 0 );
// amount of real memory left
unsigned long  get_physical_memory_left();
// do platform-specific initialization
void           initialize_platform();
// redraw all windows
void	        redraw_windows();
// paint a single window
void           paint_window( t_window* window, t_screen_point window_origin, 
							 t_screen_rect const& rect );
// paint all windows
void	       paint_windows();
// paint a single window with transparency
void           paint_window_transparency( t_window* window, t_screen_point window_origin, 
							              t_window_rect& region );
// process a single message
void           process_message();
// show or hide hardware cursor.
void           set_hardware_cursor_visible( bool arg = true );
// change the display resolution
void           set_resolution( int width, int height, bool repaint );
// platform specific shut down code
void           shut_down();

#endif // PLATFORM_H_INCLUDED